﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using LuxuryResort.Entity;
using LuxuryResort.Service.Mapping;
using Reservation = LuxuryResort.Service.Mapping.Reservation;
using Room = LuxuryResort.Service.Mapping.Room;

namespace LuxuryResort.Service
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IRoomService
    {
        [OperationContract]
        List<Room> GetRooms(Guid userId, Guid resortId);

        [OperationContract]
        Room GetRoom(Guid roomId, Guid userId, Guid resortId);

        [OperationContract]
        void BookRoom(Reservation r, Guid userId, Guid resortId);

        [OperationContract]
        void OrderFood(List<FoodOrder> fos, Guid userId, Guid resortId);

        [OperationContract]
        List<FoodBeverage> GetAllFood(Guid userId, Guid resortId);

        [OperationContract]
        List<LRMPReport> GetReport(Guid userId, Guid resortId);

        [OperationContract]
        List<LRMPNationalReport> GetNationalReport(Guid userId);

        //add new 
        [OperationContract]
        int InsertFood(FoodBeverage food, Guid userId, Guid resortId);

        [OperationContract]
        int UpdateFood(FoodBeverage food, Guid userId, Guid resortId);

        [OperationContract]
        int DeleteFood(Guid foodId, Guid userId, Guid resortId);

        [OperationContract]
        List<KeyValuePair<string, Entity.Reservation>> GetAllReservations(Guid userId, Guid resortId);

        [OperationContract]
        List<Reservation_Room> GetAllReservationRooms(Guid userId, Guid resortId);

        [OperationContract]
        List<Reservation> GetReservations(Guid userId, Guid resortId);

        [OperationContract]
        void DeleteReservation(Guid reservationId, Guid roomId, Guid userId, Guid resortId);

        [OperationContract]
        void UpdateReservation(Reservation reservation, Guid userId, Guid resortId);

        [OperationContract]
        List<Room> GetAvailableRooms(Guid userId, Guid resortId, DateTime checkin, DateTime checkout, string roomType);

        [OperationContract]
        List<LRMPOccupancyReport> GetOccupancyReport(Guid userId, Guid resortId, DateTime fromDate, DateTime toDate);
    }
}